package com.augurit.common.system.service.org;

import java.util.List;
import java.util.Map;

import org.springside.modules.orm.Page;

import com.augurit.common.base.service.IBaseService;
import com.augurit.common.syscode.web.form.SysCodeForm;
import com.augurit.common.system.web.org.form.AcApplicationForm;
import com.augurit.common.system.web.org.form.AcModuleForm;
import com.augurit.common.system.web.org.form.AcServerForm;

/**
 * 应用系统接口
 */
public interface IAcApplicationService extends IBaseService<AcApplicationForm, Long> {	
    
	/**
	 * 获取所有的应用id数组
	 * @return 应用id数组
	 */
	public Long[] getAllAppIds();
	
	/**
	 * 获取所有应用form对象列表
	 * @return 应用form对象列表
	 */
	public List<AcApplicationForm> getAllApps();
	
	/**
	 * 分页获取所有应用
	 * @param page 分页对象
	 * @return 包含应用form分页对象
	 */
	public Page<AcApplicationForm> getAllApps(Page<AcApplicationForm> page);
	
	/**
	 * 多条件查询，分页获取所有应用
	 * @param page 分页对象
	 * @param form 查询条件
	 * @return 包含应用form分页对象
	 */
	public Page<AcApplicationForm> getAllApps(Page<AcApplicationForm> page, AcApplicationForm form);
	
    /**
     * 获取指定应用的直属模块列表
     * @param appId 应用ID
     * @return 模块form对象列表
     */
	public List<AcModuleForm> getModules(Long appId);
	
	/**
	 * 分页获取指定应用的直属模块列表
	 * @param appId 应用ID
	 * @return 直属模块form对象列表
	 */
	public Page<AcModuleForm> getModules(Long appId, Page<AcModuleForm> page, Map<String, List<SysCodeForm>> sysCodeBuffer);
	
	/**
     * 获取指定应用的所有模块列表
     * @param appId 应用ID
     * @return 模块form对象列表
     */
	public List<AcModuleForm> getAllModules(Long appId);
	
	/**
     * 分页获取指定应用的所有模块列表
     * @param appId 应用ID
     * @param page 分页page对象
     * @return 模块form对象列表
     */
	public Page<AcModuleForm> getAllModules(Long appId, Page<AcModuleForm> page);
	
	/**
	 * 添加应用
	 * @param form 应用form对象
	 */
	public void saveAppCascade(AcApplicationForm form);
	
	/**
	 * 级联删除应用列表
	 * @param ids 应用ID集合
	 */
	public void deleteAppCascade(Long... ids);
	
	/**
	 * 获取指定应用的树结构，包括模块、子模块、功能
	 * @param appId 应用id
	 * @param isSetMenuName 是否设置与功能关联的菜单名称
	 * @return 应用form对象
	 */
	public AcApplicationForm getTreeByApp(AcApplicationForm form, boolean isSetMenuName);
	
	/**
	 * 获取应用列表的树结构，包括模块、子模块、功能
	 * @param appIds 应用id数组
	 * @return 应用form对象列表
	 */
	public List<AcApplicationForm> getTreeByApps(List<AcApplicationForm> forms, boolean isSetMenuName);
	
	/**
	 * 新建模块
	 * @param form 模块form对象
	 */
	public void addModuleCascade(AcModuleForm form);
	
	/**
	 * 删除模块
	 * @param moduleId 模块id
	 */
	public void deleteModuleCascade(Long moduleId);
	
}
